#import "PedidoSearchController.h"
#import "Pedido.h"
#import "PedidoCell.h"
#import "PedidoController.h"

@interface PedidoSearchController ()
@property (nonatomic, strong) NSArray* pedidos;
@property (nonatomic, strong) NSMutableDictionary* clientes;
@end

@implementation PedidoSearchController

@synthesize repositoryProvider;
@synthesize cliente;
@synthesize fabrica;
@synthesize vendedor;
@synthesize transportadora;
@synthesize pedidos;
@synthesize clientes = _clientes;

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    
    if (self.pedidos) {
        return;
    }
    
    UIBarButtonItem* rightItem = self.navigationItem.rightBarButtonItem;
    UIActivityIndicatorView* spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
    [spinner startAnimating];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:spinner];

    dispatch_queue_t queue = dispatch_queue_create("Load Models", NULL);
    dispatch_async(queue, ^() {
        NSError* error;
        self.pedidos = [self.repositoryProvider.searchService getLastPedidosForCliente:self.cliente fabrica:self.fabrica vendedor:self.vendedor transportadora:self.transportadora error:&error];
        if (!error) {
            if (self.cliente) {
                [self.clientes setObject:self.cliente forKey:self.cliente.id];
            } else {
                Repository* clienteRepository = [self.repositoryProvider getRepositoryForClass:[Cliente class]];
                NSArray* allClientes = [clienteRepository getModels:NO error:&error];
                if (!error) {
                    self.clientes = [NSMutableDictionary dictionary];
                    for (Pedido* pedido in self.pedidos) {
                        if (![self.clientes objectForKey:pedido.clienteId]) {
                            for (Cliente* currentCliente in allClientes) {
                                if ([currentCliente.id isEqualToString:pedido.clienteId]) {
                                    [self.clientes setObject:currentCliente forKey:currentCliente.id];
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
        dispatch_async(dispatch_get_main_queue(), ^(){
            [spinner stopAnimating];
            self.navigationItem.rightBarButtonItem = rightItem;
            if (error) {
                self.pedidos = @[];
                [[[UIAlertView alloc] initWithTitle:@"Erro" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
            } else {
                self.tableView.dataSource = self;
                [self.tableView reloadData];
            }
        });
    });
}

-(NSMutableDictionary*)clientes {
    if (!_clientes) {
        _clientes = [NSMutableDictionary dictionary];
    }
    return _clientes;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.pedidos.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    PedidoCell* pedidoCell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    Pedido* pedido = [self.pedidos objectAtIndex:indexPath.row];
    pedidoCell.pedido = pedido;
    pedidoCell.cliente = [self.clientes objectForKey:pedido.clienteId];
    return pedidoCell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    Pedido* pedido = [self.pedidos objectAtIndex:indexPath.row];
    [self performSegueWithIdentifier:@"toPedido" sender:pedido];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    PedidoController* pedidoController = segue.destinationViewController;
    Pedido* pedido = sender;
    pedidoController.pedido = pedido;
    pedidoController.cliente = [self.clientes objectForKey:pedido.clienteId];
    pedidoController.repositoryProvider = self.repositoryProvider;
}

@end
